package com.localization;


import android.util.Log;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

public class GatewayRequestUtil {

    /**
     * 获取网关固件版本
     *
     * @parammsg
     * @return
     */
    public static String createGatewayFirewarm() {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C 命令请求
        result.append("01");
        // 系统设置
        result.append("00");
        // 获取主机固件版本
        result.append("06");
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }

    /**
     * 获取节点的固件版本
     * 
     * @parammsg
     * @return
     */
    public static String createDeviceFirewarm(String ieee,String port) {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C 命令请求
        result.append("01");
        // 所有产品管理
        result.append("01");
        // 获取节点的固件版本
        result.append("11");
        // IEEE地址1
        result.append(ieee);
        // 端口
        result.append(port);
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }

    /**
     * 回应网关注册
     * 
     * @parammsg
     * @return
     */
    public static String createReplyGatewayRegistStr() {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '上报回复'
        result.append("04");
        // 所有产品管理
        result.append("01");
        // 查询当前的在线设备命令请求
        result.append("01");
        // 注册成功
        result.append("00");
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }

    /**
     * 回应网关心跳包
     * 
     * @paramsg
     * @return
     */
    public static String createReplyGatewayInfoStr() {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '上报回复'
        result.append("04");
        // 所有产品管理
        result.append("01");
        // 查询当前的在线设备命令请求
        result.append("02");
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }

    /**
     * 回应红外学习码上报反馈
     * 
     * @parammsg
     * @return
     */
    public static String createReplyInfraredForwarding1Str(String ieee, String port) {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '上报回复'
        result.append("04");
        // 红外转发器
        result.append("12");
        // 红外学习码上报反馈
        result.append("24");
        // IEEE地址1
        result.append(ieee);
        // 端口
        result.append(port);
        // 处理成功
        result.append("00");
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }

    /**
     * 回应红外一键匹配
     * 
     * @parammsg
     * @return
     */
    public static String createReplyInfraredForwarding2Str(String ieee, String port) {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '上报回复'
        result.append("04");
        // 红外转发器
        result.append("12");
        // 红外学习码上报反馈
        result.append("26");
        // IEEE地址1
        result.append(ieee);
        // 端口
        result.append(port);
        // 处理成功
        result.append("00");
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }

    /**
     * 开放网络
     * 
     * @parammsg
     * @return
     */
    public static String createOpenGatewayNetStr() {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '命令请求'
        result.append("01");
        // 系统设置
        result.append("00");
        // 命令
        result.append("10");
        // 0~255开放网络的时间
        result.append(FxStringUtil.to16Str2("60"));
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }

    /**
     * 关闭网络
     * 
     * @parammsg
     * @return
     */
    public static String createCloseGatewayNetStr() {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '命令请求'
        result.append("01");
        // 系统设置
        result.append("00");
        // 命令
        result.append("11");
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }

    /**
     * 设备初始化
     * 
     * @parammsg
     * @return
     */
    public static String createInitGatewayStr() {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '命令请求'
        result.append("01");
        // 系统设置
        result.append("00");
        // 控制开关量节点的开关命令请求
        result.append("12");
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }

    /**
     * 设备重启
     * 
     * @parammsg
     * @return
     */
    public static String createRestartGatewayStr() {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '命令请求'
        result.append("01");
        // 系统设置
        result.append("00");
        // 系统重启
        result.append("09");
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }

    /**
     * 查询网关所有设备
     * 
     * @parammsg
     * @return
     */
    public static String createAllDeviceInfoStr() {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '命令请求'
        result.append("01");
        // 所有产品管理
        result.append("01");
        // 查询当前的在线设备命令请求
        result.append("06");
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }

    /**
     * 查询网关通用开关量节点状态
     * 
     * @parammsg
     * @return
     */
    public static String createDeviceStatusStr(String ieee, String port,String Mac) {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(Mac);
        // S->C '命令请求'
        result.append("01");
        // 通用开关量节点（插座、灯光）
        result.append("10");
        // 查询开关量节点当前的状态命令应答
        result.append("03");
        // IEEE地址1
        result.append(ieee);
        // 端口
        result.append(port);
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }

    /**
     * 查询取电开关状态查询
     * 
     * @parammsg
     * @return
     */
    public static String createPowerStatusStr(String ieee, String port) {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '命令请求'
        result.append("01");
        // 智能取电开关
        result.append("41");
        // 取电开关状态查询
        result.append("05");
        // IEEE地址1
        result.append(ieee);
        // 端口
        result.append(port);
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }

    /**
     * 开关 开启/关闭
     * 
     * @parammsg
     * @return
     */
    public static String createSwitchOnOffStr(String MAC,String ieee, String port, String status) {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(MAC);
        // S->C '命令请求'
        result.append("01");
        // 通用开关量节点（插座、灯光）
        result.append("10");
        // 控制开关量节点的开关命令请求
        result.append("01");
        // IEEE地址1
        result.append(ieee);
        // 端口
        result.append(port);
        // 开灯
        result.append(status);
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }
    /**
     * 取电开关 开电/关电
     * 
     * @parammsg
     * @return
     */
    public static String createPowerOnOffStr(String ieee, String port, String status) {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '命令请求'
        result.append("01");
        // 通用开关量节点（插座、灯光）
        result.append("41");
        // 控制开关量节点的开关命令请求
        result.append("01");
        // IEEE地址1
        result.append(ieee);
        // 端口
        result.append(port);
        // 开
        result.append(status);
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }


    /**
     * 取电开关 查询电量
     * 
     * @parammsg
     * @return
     */
    public static String createPowerSearchStr(String ieee, String port,String mac) {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(mac);
        // S->C '命令请求'
        result.append("01");
        // 通用开关量节点（插座、灯光）
        result.append("41");
        // 控制开关量节点的开关命令请求
        result.append("04");
        // IEEE地址1
        result.append(ieee);
        // 端口
        result.append(port);
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }
    /**
     * 取电开关 查询状态
     * 
     * @parammsg
     * @return
     */
    public static String createPowerSearchStatusStr(String ieee, String port) {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '命令请求'
        result.append("01");
        // 通用开关量节点（插座、灯光）
        result.append("41");
        // 控制开关量节点的开关命令请求
        result.append("05");
        // IEEE地址1
        result.append(ieee);
        // 端口
        result.append(port);
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }

    /**
     * 门锁控制器 开锁
     * 
     * @parammsg
     * @return
     */
    public static String createLockOpenStr(String ieee, String port) {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '命令请求'
        result.append("01");
        // 智能门锁
        result.append("40");
        // 控制门锁设备开关的命令请求
        result.append("01");
        // IEEE地址1
        result.append(ieee);
        // 端口
        result.append(port);
        // 开
        result.append("01");
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }

    /**
     * 门锁控制器 电量查询
     * 
     * @parammsg
     * @return
     */
    public static String createLockProwerSearchStr(String ieee, String port) {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '命令请求'
        result.append("01");
        // 智能门锁
        result.append("40");
        // 查询门锁的电量信息
        result.append("04");
        // IEEE地址1
        result.append(ieee);
        // 端口
        result.append(port);
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }
    /**
     * 力维门锁电量查询
     * @param ieee
     * @param port
     * @return
     */
    public static String createLockProwerSearchStr2(String ieee, String port) {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '命令请求'
        result.append("01");
        // 智能门锁
        result.append("40");
        // 获取力维门锁信息(门锁信息、电量状态)
        result.append("10");
        // IEEE地址1
        result.append(ieee);
        // 端口
        result.append(port);
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }

    /**
     * 力维门锁密码修改
     * @param ieee
     * @param port
     * @return
     */
    public static String createSettingLockPwdStr(String ieee, String port,String pwd) {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '命令请求'
        result.append("01");
        // 智能门锁
        result.append("40");
        // 用户管理
        result.append("18");
        // IEEE地址1
        result.append(ieee);
        // 端口
        result.append(port);
        // 00:密码ID 01：卡片ID 02：指纹ID
        result.append("00");
        // 操作类型：00:单独删除 01：单独增加 02：连续删除 03：全部删除
        result.append("01");
        // 用户ID目前只有01，02，暂时力维门锁只设定第二位
        result.append("0002");
        // 密码（8Byte） 只有在修改密码时有效
        StringBuilder pwdBuilder = new StringBuilder();
        for (int i = 0; i < pwd.length(); i++) {
            char a = pwd.charAt(i);
            pwdBuilder.append("0").append(a);
        }
        System.out.println(pwdBuilder.toString());
        result.append(pwdBuilder.toString());
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }
    
    /**
     * 力维门锁密码清空
     * @param ieee
     * @param port
     * @return
     */
    public static String createCleanLockPwdStr(String ieee, String port) {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '命令请求'
        result.append("01");
        // 智能门锁
        result.append("40");
        // 用户管理
        result.append("18");
        // IEEE地址1
        result.append(ieee);
        // 端口
        result.append(port);
        // 00:密码ID 01：卡片ID 02：指纹ID
        result.append("00");
        // 操作类型：00:单独删除 01：单独增加 02：连续删除 03：全部删除
        result.append("00");
        // 用户ID目前只有01，02，暂时力维门锁只设定第二位
        result.append("0002");
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }

    /**
     * 窗帘控制器 开启/关闭/暂停
     * 
     * @param ieee
     * @param port
     * @param status
     *            04开 05关 06暂停
     * @return
     */
    public static String createCurtainStr(String ieee, String port, String status) {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '命令请求'
        result.append("01");
        // 通用开关量节点（插座、灯光）
        result.append("11");
        // 控制开关量节点的开关命令请求
        result.append("01");
        // IEEE地址1
        result.append(ieee);
        // 端口
        result.append(port);
        // 开
        result.append(status);
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }

    /**
     * 门磁 开启
     * 
     * @parammsg
     * @return
     */
    public static String createTurnOnMagnetStr(String Ieee,String Port) {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '命令请求'
        result.append("01");
        // 报警器（红外、烟雾、门磁）
        result.append("30");
        // 控制开关量节点的开关命令请求
        result.append("01");
        // IEEE地址1
        result.append(Ieee);
        // 端口
        result.append(Port);
        // 启用
        result.append("01");
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }

    /**
     * 门磁 关闭
     * 
     * @parammsg
     * @return
     */
    public static String createTurnOffMagnetStr(String Ieee,String port) {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '命令请求'
        result.append("01");
        // 报警器（红外、烟雾、门磁）
        result.append("30");
        // 启用报警器设备设置命令请求
        result.append("01");
        // IEEE地址1
        result.append(Ieee);
        // 端口
        result.append(port);
        // 禁用
        result.append("00");
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }

//空调控制
    public static String createCentraAirStr(String ieee,String port,String  msg) {
        JSONObject extra = JSON.parseObject(msg);
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '命令请求'
        result.append("01");
        // 中央空调控制
        result.append("42");
        // 启用报警器设备设置命令请求
        result.append("01");
        // IEEE地址1
        result.append(ieee);
        // 端口
        result.append(port);
        // 键名对应数据:电源:0x01,模式:0x02,风速:0x03,温度设置值:0x04 ，定时:0x05
        result.append(extra.getString("type"));
        // 开机 0x01,关机 0x00
        result.append(extra.getString("powerStatus"));
        // 空调模式：冷风 0x01,暖风 0x02,通风 0x03
        result.append(extra.getString("mode"));
        // 空调风速：自动 0x00,低速 0x01,中速 0x02,高速 0x03
        result.append(extra.getString("speed"));
        // 空调设置温度：5-35度(0x05-0x23)，默认 25度,
        result.append(FxStringUtil.to16Str2(extra.getString("temperature")));
        // 定时设置:定时器启动:0x01,定时器关闭:0x00
        result.append(extra.getString("timerStatus"));
        // 定时空调开/关: 开：0x01,关：0x00
        result.append(extra.getString("timerType"));
        // 定时时间（时）：0-23(0x00-0x17) 定时时间（分）：0-59(0x00-0x3B)
        result.append(FxStringUtil.to16Str2(extra.getString("timerHour")));
        result.append(FxStringUtil.to16Str2(extra.getString("timerMin")));
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }


//空调查询
    public static String createCentraAirSearchStr(String ieee, String port) {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '命令请求'
        result.append("01");
        // 中央空调控制
        result.append("42");
        // 启用报警器设备设置命令请求
        result.append("03");
        // IEEE地址1
        result.append(ieee);
        // 端口
        result.append(port);
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }





  //------------------------------------------------------------------------------------------------
    /**
     * 红外转发--索引
     * @return
     */
    public static String createInfraredForwardingStr(String ieee,String port,String type,int codeIndex ,String codeValue) {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '命令请求'
        result.append("01");
        // 红外转发器
        result.append("12");
        // 红外设备控制命令
        result.append("21");
        // IEEE地址1
        result.append(ieee);
        // 端口
        result.append(port);
        // 00:投影仪 01：风扇 02：机顶盒 03：DVD 04：TV 05:IPTV 06：空调设备
        result.append(type);
        // 型号码库索引ID
        result.append(FxStringUtil.to16Str(codeIndex));
        // 按键长度n
        result.append("01");
        // 按键值
        result.append(FxStringUtil.to16Str2(codeValue));
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }


   /* public static String createInfraredForwardingStr(FxMessage msg) {
        JSONObject extra = (JSONObject) msg.getExtra();
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '命令请求'
        result.append("01");
        // 红外转发器
        result.append("12");
        // 红外设备控制命令
        result.append("21");
        // IEEE地址1
        result.append(msg.getIeee());
        // 端口
        result.append(msg.getPort());
        // 00:投影仪 01：风扇 02：机顶盒 03：DVD 04：TV 05:IPTV 06：空调设备
        result.append(extra.getString("type"));
        // 型号码库索引ID
        result.append(FxStringUtil.to16Str(extra.getInt("codeIndex")));
        // 按键长度n
        result.append("01");
        // 按键值
        result.append(FxStringUtil.to16Str2(extra.getString("codeValue")));
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }*/
   //---------------------------------------------------------------------------------------------
    /**
     * 红外转发--开启学习模式
     * @param studyType
      00：请求原始码 01：一键匹配
     * @return
     */
    public static String createInfraredForwardingStr2(String ieee,String port,String type, String studyType) {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '命令请求'
        result.append("01");
        // 红外转发器
        result.append("12");
        // 红外设备控制命令
        result.append("23");
        // IEEE地址1
        result.append(ieee);
        // 端口
        result.append(port);
        // 00:投影仪 01：风扇 02：机顶盒 03：DVD 04：TV 05:IPTV 06：空调设备
        result.append(type);
        // 00：请求原始码 01：一键匹配
        result.append(studyType);
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }
//------------------------------------------------------------------------------------------------
    /**
     * 红外转发--原始码
     * @return
     */
    public static String createInfraredForwardingStr3(String ieee,String port,String code) {
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '命令请求'
        result.append("01");
        // 红外转发器
        result.append("12");
        // 红外设备控制命令
        result.append("25");
        // IEEE地址1
        result.append(ieee);
        // 端口
        result.append(port);
        // 数据长度L
        int len = code.length() / 2;
        result.append(FxStringUtil.to16Str2(len + ""));
        // 数据
        result.append(code);
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }

    //---------------------------------------------------------------------------------------
    /**
     * 红外转发--空调
     *
     * @param msg
     * @return
     */
    public static String createInfraredForwardingStr4(String ieee,String port,String  msg) {
        JSONObject extra = JSON.parseObject(msg);
        StringBuilder result = new StringBuilder();
        result.append("0001");
        result.append(FxConst.LOCAL_MAC);
        // S->C '命令请求'
        result.append("01");
        // 红外转发器
        result.append("12");
        // 红外设备控制命令
        result.append("21");
        // IEEE地址1
        result.append(ieee);
        // 端口
        result.append(port);
        // 00:投影仪 01：风扇 02：机顶盒 03：DVD 04：TV 05:IPTV 06：空调设备
        result.append(extra.getString("type"));
        // 型号码库索引ID
        result.append(FxStringUtil.to16Str(extra.getInteger("codeIndex")));
        // 按键长度n
        result.append("07");
        // 空调温度 19－30度(0x13-0x1E),默认：25度;十六进制,与显示对应,通过温度加减键调节
        result.append(FxStringUtil.to16Str2(extra.getString("temperature")));
        // 风量数据：自动：01,低：02,中：03,高：04,与显示对应：默认：01,相关显示符号参考样机）
        result.append(extra.getString("speed"));
        // 手动风向：向下：03,中：02,向上：01,默认02,与显示对应;
        result.append("02");
        // 自动风向：01,打开,00关,默认开:01,与显示对应
        result.append("01");
        // 开关数据：开机时：0x01,关机时：0x00,通过按开关机（电源）键实现,开机后,其它键才有效,
        result.append(extra.getString("powerStatus"));
        // 键名对应数据,电源：0x01,模式：0x02,风量：0x03,手动风向：0x04, 自动风向：0x05,温度加：0x06,
        // 温度减：0x07, 表示当前按下的是哪个键
        result.append(extra.getString("settingType"));
        // 模式对应数据和显示：自动（默认）：0x01,制冷：0X02,抽湿：0X03,送风：0x04;制热：0x05,这些值按模式键实现
        result.append(extra.getString("mode"));
        // 长度位
        result.insert(0, FxStringUtil.to16Str(result.length() / 2));
        // FCS异或校验位
        result.append(FxStringUtil.xorFor16Str(result.toString()));
        // 数据起始标志
        result.insert(0, "FC");
        return result.toString();
    }



























}
